\hypertarget{pageinc_sec_inc1}{}\section{Operacje rejestrowe oraz arytmetyczno-\/logiczne}\label{pageinc_sec_inc1}
1. Pobranie numeru rejestru i jego wartości z instrukcji: 
\begin{DoxyCodeInclude}
        int Rd_temp = (getMEMC(getPC()) & 0x0FF0) >> 4;
        uint8_t Rd = (Rd_temp & 0b00011111);
        uint8_t Rd_val = getRegister(Rd) % MAX_DATA_VAL;

\end{DoxyCodeInclude}
 2. Zwiększenie wartości o 1: 
\begin{DoxyCodeInclude}
        uint8_t R = Rd_val + 1;                                                                 /
      /Zwiększenie wartości o 1

\end{DoxyCodeInclude}
 3. Zapisanie wartosci do rejestru: 
\begin{DoxyCodeInclude}
        setRegister(Rd,R);                                                                              /
      /Zapisanie wartosci do rejestru

\end{DoxyCodeInclude}
 4. Zwiększenie licznika rozkazów: 
\begin{DoxyCodeInclude}
    incPC();                                                                                            /
      /Zwiększenie licznika rozkazów

\end{DoxyCodeInclude}
\hypertarget{pageinc_sec_inc2}{}\section{Operacje na flagach}\label{pageinc_sec_inc2}
1. Ustawienie flagi V: 
\begin{DoxyCodeInclude}
        if(Rd_val == 127) SetFlagRegisterBit(FLAG_V);                                   /
      / Ustawienie flagi V
        else ClearFlagRegisterBit(FLAG_V);

\end{DoxyCodeInclude}
 2. Ustawienie flagi N 
\begin{DoxyCodeInclude}
    if( ( (Rd & 0x80) >> 7) == 0 && ((R & 0x80) >> 7) == 1) // Jeśli MSB Rd == 0 
      i MSB R == 1 to zmieniamy
        SetFlagRegisterBit(FLAG_N);                                                                     /
      / bo nastąpiła zmiana MSB
    else
        ClearFlagRegisterBit(FLAG_N);

\end{DoxyCodeInclude}
 3. Ustawienie flagi Z 
\begin{DoxyCodeInclude}
    if( R == 0 ) SetFlagRegisterBit( FLAG_Z );                                          /
      /Ustawienie flagi Z
        else ClearFlagRegisterBit( FLAG_Z );

\end{DoxyCodeInclude}
 4. Ustawienie flagi S 
\begin{DoxyCodeInclude}
        if( (GetFlagRegisterStatus(FLAG_N) ^ GetFlagRegisterStatus(FLAG_V)) == 1 
      ){
                SetFlagRegisterBit(FLAG_S);                                                             /
      /Ustawienie flagi S
        }
        else ClearFlagRegisterBit(FLAG_S);

\end{DoxyCodeInclude}
\hypertarget{pageinc_sec_inc3}{}\section{Kod źródłowy funkcji}\label{pageinc_sec_inc3}

\begin{DoxyCodeInclude}
/*
================================================================================
        Plik: f_inc.c
--------------------------------------------------------------------------------
        Autorzy: Piotr Zdunek, Mateusz Słowikowski, Krzysztof Wiąckowski
        Projekt:Model mikrokontrolera AVR
        Kompilator: avr-gcc-4.3.5
        Doc: doxygen 1.7.4
--------------------------------------------------------------------------------
        Zawiera:
--------------------------------------------------------------------------------
        Komentarze:
================================================================================
*/

#include "types.h"
#include "mem_abs.h"

// ******************************************************************************
      
//INC - funkcja zwiększająca wartosć danego rejestru o 1
// ******************************************************************************
      


void F_INC(void){
#if DEBUG_MODE
        printf("Function INC.");
#endif
//Pobranie numeru rejestru i jego wartości z instrukcji
        int Rd_temp = (getMEMC(getPC()) & 0x0FF0) >> 4;
        uint8_t Rd = (Rd_temp & 0b00011111);
        uint8_t Rd_val = getRegister(Rd) % MAX_DATA_VAL;
        uint8_t R = Rd_val + 1;                                                                 /
      /Zwiększenie wartości o 1

        setRegister(Rd,R);                                                                              /
      /Zapisanie wartosci do rejestru
    incPC();                                                                                            /
      /Zwiększenie licznika rozkazów

                                                                                                                        /
      / USTAWIENIE REJESTRU FLAG
        if(Rd_val == 127) SetFlagRegisterBit(FLAG_V);                                   /
      / Ustawienie flagi V
        else ClearFlagRegisterBit(FLAG_V);

    if( ( (Rd & 0x80) >> 7) == 0 && ((R & 0x80) >> 7) == 1) // Jeśli MSB Rd == 0 
      i MSB R == 1 to zmieniamy
        SetFlagRegisterBit(FLAG_N);                                                                     /
      / bo nastąpiła zmiana MSB
    else
        ClearFlagRegisterBit(FLAG_N);

    if( R == 0 ) SetFlagRegisterBit( FLAG_Z );                                          /
      /Ustawienie flagi Z
        else ClearFlagRegisterBit( FLAG_Z );

        if( (GetFlagRegisterStatus(FLAG_N) ^ GetFlagRegisterStatus(FLAG_V)) == 1 
      ){
                SetFlagRegisterBit(FLAG_S);                                                             /
      /Ustawienie flagi S
        }
        else ClearFlagRegisterBit(FLAG_S);

}
\end{DoxyCodeInclude}
 